package org.ssssssss.example.function;

import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.ssssssss.script.annotation.Comment;
import org.ssssssss.script.functions.ExtensionMethod;

/**
 * String类型转换
 */
@Component  //注入到Spring容器中，之后会被自动注册
public class StringFunctionExtension implements ExtensionMethod{
    @Override
	public Class<?> support() {
		return String.class;    //为String类型扩展方法
	}
    /**
	*	方法必须是public static 修饰,参数至少有一个,且第一个参数必须为support方法返回的类型
	*	以将字符串转为int为例,该方法编写如下,最终调用时使用strVar.toInt()调用
	*	该方法第一个参数会自动被传入,所以调用时无需传入
	*/
    @Comment("字符串截取，指定开始和结束位置")
	public static String subStr(String str, int startIdx, int endIdx){    // 第一个参数无需使用@Comment注解
		return StringUtils.substring(str, startIdx, endIdx);
	}
    @Comment("字符串截取，指定开始位置")
    public static String subStr(String str, int startIdx){    // 第一个参数无需使用@Comment注解
    	return StringUtils.substring(str, startIdx);
    }
    @Comment("字符串截取，指定字符串之后的")
	public static String subAfter(String str, String separator){    // 第一个参数无需使用@Comment注解
		return StringUtils.substringAfter(str, separator);
	}
    @Comment("字符串截取，指定字符串之前的")
	public static String subBefore(String str, String separator){    // 第一个参数无需使用@Comment注解
		return StringUtils.substringBefore(str, separator);
	}
    @Comment("字符串截取，指定字符串中间的")
	public static String subBetween(String str, String tag){    // 第一个参数无需使用@Comment注解
		return StringUtils.substringBetween(str, tag);
	}
    @Comment("字符串截取，指定字符串中间的")
	public static String subBetween(String str, String open, String close){    // 第一个参数无需使用@Comment注解
		return StringUtils.substringBetween(str, open, close);
	}
    @Comment("字符串截取，指定字符串中间的")
	public static String[] subsBetween(String str, String open, String close){    // 第一个参数无需使用@Comment注解
		return StringUtils.substringsBetween(str, open, close);
	}
}